package com.cacho.s2b.lesson.learn;

import java.util.Arrays;

/**
 * @Description String常见用法
 * 1.String.valueOf(int)：转换int为String
 * 2.String.format()
 * 3.String.Join()
 * 4.Str.trim() 去掉字符串首尾空格
 * 5.Str.substring(int,int) 方法截取字符串
 * 6.Str.startWith(Str1)：字符串Str是否以字符串Str1开头，返回true/false
 * 7.Str.split(正则表达式,int)：得到一个数组，int=2表示最多分割成两个子字符串
 * 8.Str.lastIndexOf(字符串) ：返回从尾部第一个字符串的索引
 * 9.Str.equalsIgnoreCase(String): 忽略大小写比较大小
 * 10.Str.matches(正则表达式): 字符串是否匹配正则
 * 11.Str.contains(字符串): 字符串包含另外一个字符串
 * 12.Str.indexOf(字符串): 方法返回字符串在另外一个字符串索引位置(找不到=-1)
 * 13.Str.charAt(int): 返回字符串指定位置char值
 * 13.Str.replaceAll(正则,字符串):符合规则的字符串统一替换为指定字符串
 * @Author LingWei
 * @date 2023/12/17
 **/

public class LearnString {
    public static void main(String[] args){
        String str = "Hello, World";
        String str2 = " Hello, World ";
        String str3 = "NG_DB_SIT1.jdbc";
        String str4 = "Hello;World;test";
        String str5 = "Hello;World,test";
        String str6 = "Hello;&World;$test";
        String str7 = "data/def/api_def.csv";
        String[] str1 = new String[]{"1", "1", "1", "1", "1"}; // 赋值
        int num = 1;
        System.out.println("String.valueOf(int)方法转换 数字 为 String："+String.valueOf(5.44));
        System.out.println("String.format() 方法int转String："+String.format("%04d",num)); //0001
        System.out.println("Str.trim() 方法去掉字符串首尾空格："+str2.trim());
        System.out.println("Str.substring(int) 方法截取索引int开始的字符串："+str.substring(1));
        System.out.println("Str.substring(int1,int2) 方法截取索引int1开始,int2结束的字符串,长度=int2-int1："+str.substring(1,5));
        System.out.println("Str.startWith(Str1) ："+str2.startsWith(str));
        // int 可以限制切割的字符个数，得到2个字符串：Hello和World;test
        System.out.println("str4.split(';',int) ：得到一个数组,最多分割成两个子字符串"+ Arrays.toString(str4.split(";",2)));
        // [] 可以指定多个字符作为分隔符，得到3个字符串：Hello、World、test
        System.out.println("str5.split('[;,]') ：使用多个字符作为分隔符得到一个数组"+ Arrays.toString(str5.split("[;,]")));
        // .是正则表达式的特殊符号，需要特殊处理，加上\\， 得到 NG_DB_SIT1和jdbc
        System.out.println("str3.split('/',int) ：得到一个数组,转义特殊字符"+ Arrays.toString(str3.split("\\.",2)));
        // \\p{Punct} 可以分割所有特殊符号
        System.out.println("str6.split('\\p{Punct}') ：得到一个数组,分割所有特殊符号"+ Arrays.toString(str6.split("\\p{Punct}")));

        System.out.println("str8.lastIndexOf('/') ：从结尾数/ 的索引位置："+ str7.lastIndexOf("/"));
        System.out.println("先找到指定的字符串位置，再截取："+ str7.substring(0,str7.lastIndexOf("/")+1));

        System.out.println("Str.equalsIgnoreCase(String)忽略大小写比较值是否相等："+"Data/def/api_def.csv".equalsIgnoreCase(str7) );
        System.out.println("Str.equals(String)比较值是否相等："+"Data/def/api_def.csv".equals(str7) );

        System.out.println("Str.replaceAll() 方法按正则替换成指定字符串："+"SAs111STB".replaceAll("[A-Z]{2}","cacho")); // cachos111cachoB
        System.out.println("Str.replaceAll() 方法字符串直接替换："+"yyyy\\MM-dd".replaceAll("\\\\","::")); // 替换特殊字符
        System.out.println("Str.contains(String) 方法判断字符串是否包含："+"SA".contains("a"));
        System.out.println("Str.indexOf(String) 方法返回字符串在另外一个字符串索引位置："+"SA".indexOf("A")); // 1
        System.out.println("Str.matches() 方法正则判断："+"SA".matches("^[A-Z]{2}$"));

        System.out.println("Str.charAt() 方法获取指定位置字符的char类型："+"now(yyyy-MM-dd)".charAt(0)); //
        System.out.println("Str.charAt() 方法获取的char可以与int计算："+("now(yyyy-MM-dd)".charAt(0)-1)); // n=110-1=109  char可以直接转换为int, int转换为Char需要 (char)

        System.out.println("String.format() 方法占位符："+String.format("%s",str));
        System.out.println("String.Join(分隔符A,数组B)：将数组B按分隔符A串联成一个字符串"+String.join(",",str1));
    }
}